﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cotizav.CONEXION;
using System.Transactions;
using System.Data.Linq;
using System.Data;

namespace Cotizav.CONTROLADOR
{
    public class CtrlCartaCompromisoDetalle
    {
        private ConexionDataContext conexion;

        public CtrlCartaCompromisoDetalle()
        {
            
        }

        internal void registrarCartaCompromisoDetalle(CARTACOMPROMISO_DETALLE cartaDetalle, CARTA_COMPROMISO cartaCompromiso, int i)
        {
            using (TransactionScope transactionScope = new TransactionScope())
            {
                using (conexion = new ConexionDataContext())
                {
                    try
                    {
                        int correlativoCartaDetalle = conexion.COTIZAV_CORRELATIVO.Single(x => x.IDENTIFICADOR == "COTIZAV").CARTACOMPROMISO_DETALLE.Value;
                        string num = Convert.ToString(correlativoCartaDetalle);
                        string numero = num.Trim().PadLeft(11, '0');
                        string idCartaCompromisoDetalle = "CCD_" + numero;

                        cartaDetalle.idCartaCompromisoDetalle = idCartaCompromisoDetalle;
                        cartaDetalle.idcartacompromiso = cartaCompromiso.idCartaCompromiso;
                        cartaDetalle.secuencia = i;

                        conexion.CARTACOMPROMISO_DETALLE.InsertOnSubmit(cartaDetalle);
                        conexion.SubmitChanges();
                        conexion.increm_ContCartaCompromisoDetalle();

                        transactionScope.Complete();
                    }
                    catch (Exception)
                    {
                        throw;
                    } 
                }
            }
        }

        internal List<CARTACOMPROMISO_DETALLE> getListCartaCompromisoDetalle(string idCartaCompromiso)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    DataLoadOptions dlo = new DataLoadOptions();
                    dlo.LoadWith<CARTACOMPROMISO_DETALLE>(c => c.CARTA_COMPROMISO);
                    dlo.LoadWith<CARTACOMPROMISO_DETALLE>(e => e.EQUIPO);
                    conexion.LoadOptions = dlo;

                    return conexion.CARTACOMPROMISO_DETALLE.Where(x => x.idcartacompromiso == idCartaCompromiso).ToList();
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        internal System.Data.DataTable getListCartacompromisoDetalleSP(string idCartaCompromiso)
        {
            DataTable result = new DataTable();

            using (conexion = new ConexionDataContext())
            {
                var query = conexion.usp_listarCartaCompromisoDetalle(idCartaCompromiso);

                result.Columns.Add("idcartacompromiso", Type.GetType("System.String"));
                result.Columns.Add("idequipo", Type.GetType("System.String"));
                result.Columns.Add("idCaracteristica", Type.GetType("System.String"));
                result.Columns.Add("secuencia", Type.GetType("System.String"));
                result.Columns.Add("nombreEquipo", Type.GetType("System.String"));
                result.Columns.Add("nombreCaracteristica", Type.GetType("System.String"));
                result.Columns.Add("descripcion", Type.GetType("System.String"));

                DataRow dr;

                foreach (var c in query)
                {
                    dr = result.NewRow();

                    dr[0] = c.idcartacompromiso;
                    dr[1] = c.idequipo;
                    dr[2] = c.idCaracteristica;
                    dr[3] = c.secuencia;
                    dr[4] = c.nombreEquipo.Trim() ?? string.Empty;
                    dr[5] = c.nombreCaracteristica.Trim() ?? string.Empty;
                    dr[6] = c.descripcion.Trim() ?? string.Empty;

                    result.Rows.Add(dr);
                }

                return result;
            }
        }
    }
}
